/*
* Copyright 2017 rootkiwi
*
* AN2Linux-client is licensed under GNU General Public License 3.
*
* See LICENSE for more details.
*/
package kiwi.root.an2linuxclient.crypto;
import android.content.Context;
import android.content.SharedPreferences;
import android.util.Base64;
import android.util.Log;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;
import kiwi.root.an2linuxclient.R;
import static android.content.Context.MODE_PRIVATE;
public class RsaHelper {
static void initialiseRsaKeyAndCert(Context c){
try {
SharedPreferences deviceKeyPref = c.getSharedPreferences(
c.getString(R.string.device_key_and_cert), MODE_PRIVATE);
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(4096);
KeyPair keyPair = kpg.generateKeyPair();
deviceKeyPref.edit().putString(c.getString(R.string.privatekey),
Base64.encodeToString(keyPair.getPrivate().getEncoded(), Base64.NO_WRAP)).apply();
Log.d("RsaHelper", "Generated new keypair successfully");
TlsHelper.initialiseCertificate(c, keyPair);
} catch (Exception e){
Log.e("RsaHelper", "initialiseRsaKeyAndCert");
Log.e("StackTrace", Log.getStackTraceString(e));
}
}
static PrivateKey getPrivateKey(Context c){
try {
SharedPreferences deviceKeyPref = c.getSharedPreferences(c.getString(R.string.device_key_and_cert), MODE_PRIVATE);
byte[] privateKeyBytes = Base64.decode(deviceKeyPref.getString(c.getString(R.string.privatekey), ""), Base64.DEFAULT);
return KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(privateKeyBytes));
} catch (Exception e) {
Log.e("RsaHelper", "getPrivateKey");
Log.e("StackTrace", Log.getStackTraceString(e));
return null;
}
}
}